package zeus.ejb;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import zeus.exception.EntidadeException;
import zeus.model.Cliente;
import zeus.model.Reserva;
import zeus.service.EjbClienteService;


@Stateless
public class EjbCliente implements EjbClienteService {
	
	@PersistenceContext
	EntityManager entityManager;
	
	@Override
	public void cadastrarCliente(Cliente hospede){
		entityManager.persist(hospede);
	}
	
	public void atualizarCliente(Cliente hospede){
		entityManager.merge(hospede);
	}
	
	public boolean senhasIguais(String senha1, String senha2){
		return senha1.equals(senha2);
	}
	
	public int calcularIdade(Date nascimento){
		if(nascimento == null){
			return 0;
		}
		
		Calendar nascimentoCal = Calendar.getInstance();
		nascimentoCal.setTime(nascimento);
		
		Calendar hoje = Calendar.getInstance();
		hoje.setTime(new Date(System.currentTimeMillis()));
		
		int idade = hoje.get(Calendar.YEAR) - nascimentoCal.get(Calendar.YEAR);
		nascimentoCal.add(Calendar.YEAR, idade);
		
		if(nascimentoCal.after(hoje)){
			idade--;
		}
		
		return idade;
		
	}
	
	public boolean hasCadastro(String email){
		
		String hql = "from Cliente c where c.email = '" + email + "'";
		Query query = entityManager.createQuery(hql);
		
		try{
			Cliente cliente = (Cliente) query.getSingleResult();
			return cliente != null;
		}catch(Exception e){
			return false;
		}
	}
	
	public Cliente pegarPeloEmail(String email) throws EntidadeException{
		String hql = "from Cliente c where c.email='"+ email +"'";
		Query query = entityManager.createQuery(hql);
		
		try {
			Cliente c = (Cliente) query.getSingleResult();
			return c;
		} catch (Exception e) {
			throw new EntidadeException();
		}
		
	}
	
	public String gerarSenhaAleatoria(){
		
		String alfanumerico = "qwertyuiopasdfghjklzxcvbnm1234567890";
		String chave = "";
		
		for(int i = 0; i < 8; i++ ){
			int random = (int) (1 + (Math.random() *26));
			chave += alfanumerico.charAt(random);
		}
		
		return chave;
	}
	
	@SuppressWarnings("unchecked")
	public List<Reserva> listaReservas(Long id){
		List<Reserva> reservas = entityManager.createQuery("SELECT r FROM Reserva r WHERE r.hospede.id = ?0")
				.setParameter(0, id).getResultList();
		
		return reservas;
	}
	
	@Override
	public EntityManager getEntityManager() {
		return entityManager;
	}

}
